#pragma once

#include <iostream>

class RunConfiguration
{
private:
    tstring m_filter;
    tstring m_pipeName;
    tstring m_testLib;
    tstring m_libDir;

    bool m_listOperation;
    bool m_selfTest;

    int m_argc;
    _TCHAR** m_argv;

public:
    RunConfiguration(void);
    ~RunConfiguration(void);

    /**
     * Populates this configuration object by parsing command line arguments.
     * Relevant arguments are removed.
     */
    void Parse(int argc, _TCHAR* argv[]);

    tstring GetFilter() const;
    tstring GetPipeName() const;
    tstring GetTestLib() const;
    tstring GetLibDir() const;

    bool IsListOperation() const;
    bool IsSelfTest() const;

    int GetArgc() const;
    int* GetMutableArgc();
    _TCHAR** GetArgv();

private:
    void CreateArgv(int argc, _TCHAR* argv[]);
    void DeleteArgv();
};

